/**
 * @widoc $.fn.allowKeyPadScroll
 * @namespace aux
 * @des 当前元素中的输入元素弹出小键盘时，若被遮挡允许调整其位置。<br />
 * 当前元素为会弹出小键盘的文本域的容器，内容超出时，滚动条出现在该元素上。<br />
 * 一般项目中会统一布局为上中下结构，只需在项目公用js中对中间区域调用此方法即可。
 <p class="t_red">注意：服务器打包才生效，并且需要将键盘模式设为“压缩”。</p>
 * @type function
 */
$.fn.allowKeyPadScroll = function(){
    var focusElBottom, oldScrollTop
        , contentEl = $(this);
    var fResizeCb = function(){
        setTimeout(function(){
            if(focusElBottom == undefined) return;
            var contentBcr = contentEl[0].getBoundingClientRect();
            var contentBottom = contentBcr.top + contentBcr.height;
            if(contentBottom > focusElBottom) return;// 触发元素在视图内
            contentEl.scrollTop(oldScrollTop + (focusElBottom - contentBottom));
        }, 0);
    };
    var fOnFocus = function(){
        var bcr = $(this)[0].getBoundingClientRect();
        focusElBottom = bcr.top + bcr.height;// 记录聚焦元素的 bottom
        oldScrollTop = contentEl[0].scrollTop;
    };
    var fOnBlur = function(){
        focusElBottom = oldScrollTop = undefined;
    };
    $.addResizeListener(fResizeCb);
    contentEl.off('focus.allowKeyPadScroll')
             .on('focus.allowKeyPadScroll', 'input:not([type]),input[type="text"],input[type="password"],textarea', fOnFocus);
    contentEl.off('blur.allowKeyPadScroll')
             .on('blur.allowKeyPadScroll', 'input:not([type]),input[type="text"],input[type="password"],textarea', fOnBlur);
};